package br.faimg.pomar.modelo.dao;


import br.faimg.pomar.modelo.interfaces.CRUDInterface;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
import br.faimg.pomar.modelo.pojo.Estacao;
import br.faimg.pomar.modelo.pojo.OrdemProducao;
import br.faimg.pomar.modelo.pojo.Produto;
import br.faimg.pomar.modelo.pojo.RotaEstacao;
import br.faimg.pomar.modelo.pojo.RotaProduto;
import br.faimg.pomar.modelo.pojo.TipodeProduto;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;


/**
 *
 * @author flavio
 */
public class RotaEstacaoDAO implements CRUDInterface<RotaEstacao>{

    public void create(RotaEstacao pojo) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public void update(RotaEstacao pojo) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public List<RotaEstacao> readByExample(RotaEstacao pojo) {
        Connection con = null;
        PreparedStatement stm = null;
        ResultSet rs = null;

        String sql = "";
        
        //utilizado para verificar se irá fazer a pesquisa por numero de ordem de producao
        boolean ordemProducaoPesquisa = false;
        
        List<RotaEstacao> rotaEstacao = null;


        if (pojo == null) {

            pojo = new RotaEstacao();
        }
        
        if (pojo.getEstacaoAnterior() == null) {
            pojo.setEstacaoAnterior(new Estacao());
        }

        if (pojo.getEstacaoProxima() == null) {
            pojo.setEstacaoProxima(new Estacao());
        }
        
        if (pojo.getEstacaoAnterior().getCodigo() == null) {
            pojo.getEstacaoAnterior().setCodigo("");
        }

        if (pojo.getEstacaoProxima().getCodigo() == null) {
            pojo.getEstacaoProxima().setCodigo("");
        }

        if (pojo.getRotaProduto() == null) {
            pojo.setRotaProduto(new RotaProduto());
        }

        if (pojo.getRotaProduto().getCodigo() == null) {

            pojo.getRotaProduto().setCodigo("");
        }
        
        if (pojo.getRotaProduto().getOrdemProducao().getNumOrp() == null) {

            sql = "select * from rota_estacao,rota_produto,ordem_producao,produto,tipo_produto where rte_est_codigo_ant ilike ? and  rte_est_codigo_pro ilike ? and rte_rtp_codigo like ? and rtp_orp_numero =  orp_numero and pdt_codigo = orp_pdt_codigo and pdt_tpp_codigo = tpp_codigo";
            
        } else {
            
            //Pesquisa será feita pela ordem 
            ordemProducaoPesquisa = true;
            sql = "select * from rota_estacao,rota_produto,ordem_producao,produto,tipo_produto where rte_est_codigo_ant ilike ? and  rte_est_codigo_pro ilike ? and rte_rtp_codigo like ? and rtp_orp_numero =  orp_numero and pdt_codigo = orp_pdt_codigo and pdt_tpp_codigo = tpp_codigo and  rtp_orp_numero = ?";
            
        }

        con = ConnectionManager.getInstance().getConnection();

        try {
            stm = con.prepareStatement(sql);
            stm.setString(1, "%" + pojo.getEstacaoAnterior().getCodigo() + "%");
            stm.setString(2, "%" + pojo.getEstacaoProxima().getCodigo() + "%");
            stm.setString(3, "%" + pojo.getRotaProduto().getCodigo() + "%");
            
            if (ordemProducaoPesquisa){
                stm.setInt(4, pojo.getRotaProduto().getOrdemProducao().getNumOrp());
            }
            
            rs = stm.executeQuery();

            System.out.println(RotaEstacaoDAO.class.toString() + " ::: " + stm.toString());
            
            rotaEstacao = new ArrayList<RotaEstacao>();

            while (rs.next()) {
                TipodeProduto tipodeProduto = new TipodeProduto();
                tipodeProduto.setCodigo(rs.getString("tpp_codigo"));
                tipodeProduto.setDescricao(rs.getString("tpp_descricao"));
                
                Produto produto = new Produto();
                produto.setTipo(tipodeProduto);
                produto.setCodigo(rs.getString("pdt_codigo"));
                produto.setDescricao(rs.getString("pdt_descricao"));
                produto.setQtdEmb(rs.getInt("pdt_qtdemb"));
                
                
                OrdemProducao ordemdeproducao = new OrdemProducao();
                ordemdeproducao.setProduto(produto);
                ordemdeproducao.setNumOrp(rs.getInt("orp_numero"));
                ordemdeproducao.setQtdProd(rs.getInt("orp_qtdprod"));
                
                
                RotaProduto rotaProduto = new RotaProduto();
                rotaProduto.setOrdemProducao(ordemdeproducao);
                rotaProduto.setCodigo(rs.getString("rtp_codigo"));
                rotaProduto.setDescricao(rs.getString("rtp_descricao"));
                
                
                RotaEstacao rotaEstacao1 = new RotaEstacao();
                EstacaoDAO daoEstacao = new EstacaoDAO();
                
                rotaEstacao1.setRotaProduto(rotaProduto);
                rotaEstacao1.setSquencia(rs.getInt("rte_sequencia"));
                rotaEstacao1.setEstacaoAnterior(daoEstacao.readById(rs.getString("rte_est_codigo_ant")));
                rotaEstacao1.setEstacaoProxima(daoEstacao.readById(rs.getString("rte_est_codigo_pro")));
                
                rotaEstacao.add(rotaEstacao1);
                
            }
        } catch (SQLException ex) {
            Logger.getLogger(RotaEstacaoDAO.class.getName()).log(Level.SEVERE, null, ex);
        }


        return rotaEstacao;
    }

    public RotaEstacao readById(String codigo) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public void delete(String codigo) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public RotaEstacao readById(Integer codigo) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public void delete(Integer codigo) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

}
